home *** CD-ROM | disk | FTP | other *** search
/ Quick PC 61 / Quick PC 61.iso / I386 / PRNQCTL.VB_ / prnqctl.vbs
Encoding:
Text File  |  2003-02-21  |  26.1 KB  |  753 lines

  1. '----------------------------------------------------------------------
  2. '
  3. ' Copyright (c) Microsoft Corporation. All rights reserved.
  4. '
  5. ' Abstract:
  6. ' prnqctl.vbs - printer control script for WMI on Whistler
  7. '    used to pause, resume and purge a printer
  8. '    also used to print a test page on a printer
  9. '
  10. ' Usage:
  11. ' prnqctl [-zmex?] [-s server] [-p printer] [-u user name] [-w password]
  12. '
  13. ' Examples:
  14. ' prnqctl -m -s server -p printer
  15. ' prnqctl -x -s server -p printer
  16. ' prnqctl -e -b printer
  17. '----------------------------------------------------------------------
  18.  
  19. option explicit
  20.  
  21. '
  22. ' Debugging trace flags, to enable debug output trace message
  23. ' change gDebugFlag to true.
  24. '
  25. const kDebugTrace = 1
  26. const kDebugError = 2
  27. dim   gDebugFlag
  28.  
  29. gDebugFlag = false
  30.  
  31. '
  32. ' Operation action values.
  33. '
  34. const kActionUnknown    = 0
  35. const kActionPause      = 1
  36. const kActionResume     = 2
  37. const kActionPurge      = 3
  38. const kActionTestPage   = 4
  39.  
  40. const kErrorSuccess     = 0
  41. const KErrorFailure     = 1
  42.  
  43. const kNameSpace        = "root\cimv2"
  44.  
  45. '
  46. ' Generic strings
  47. '
  48. const L_Empty_Text                 = ""
  49. const L_Space_Text                 = " "
  50. const L_Error_Text                 = "Error"
  51. const L_Success_Text               = "Success"
  52. const L_Failed_Text                = "Failed"
  53. const L_Hex_Text                   = "0x"
  54. const L_Printer_Text               = "Printer"
  55. const L_Operation_Text             = "Operation"
  56. const L_Provider_Text              = "Provider"
  57. const L_Description_Text           = "Description"
  58. const L_Debug_Text                 = "Debug:"
  59.  
  60. '
  61. ' General usage messages
  62. '                                 
  63. const L_Help_Help_General01_Text   = "Usage: prnqctl [-zmex?] [-s server][-p printer][-u user name][-w password]"
  64. const L_Help_Help_General02_Text   = "Arguments:"
  65. const L_Help_Help_General03_Text   = "-e     - print test page"
  66. const L_Help_Help_General04_Text   = "-m     - resume the printer"
  67. const L_Help_Help_General05_Text   = "-p     - printer name"
  68. const L_Help_Help_General06_Text   = "-s     - server name"
  69. const L_Help_Help_General07_Text   = "-u     - user name"
  70. const L_Help_Help_General08_Text   = "-w     - password"
  71. const L_Help_Help_General09_Text   = "-x     - purge the printer (cancel all jobs)"
  72. const L_Help_Help_General10_Text   = "-z     - pause the printer"
  73. const L_Help_Help_General11_Text   = "-?     - display command usage"
  74. const L_Help_Help_General12_Text   = "Examples:"
  75. const L_Help_Help_General13_Text   = "prnqctl -e -s server -p printer"
  76. const L_Help_Help_General14_Text   = "prnqctl -m -p printer"
  77. const L_Help_Help_General15_Text   = "prnqctl -x -p printer"
  78.  
  79. '
  80. ' Messages to be displayed if the scripting host is not cscript
  81. '                            
  82. const L_Help_Help_Host01_Text      = "Please run this script using CScript."  
  83. const L_Help_Help_Host02_Text      = "This can be achieved by"
  84. const L_Help_Help_Host03_Text      = "1. Using ""CScript script.vbs arguments"" or" 
  85. const L_Help_Help_Host04_Text      = "2. Changing the default Windows Scripting Host to CScript"
  86. const L_Help_Help_Host05_Text      = "   using ""CScript //H:CScript //S"" and running the script "
  87. const L_Help_Help_Host06_Text      = "   ""script.vbs arguments""."
  88.  
  89. '
  90. ' General error messages
  91. '                                                 
  92. const L_Text_Error_General01_Text  = "The scripting host could not be determined."                
  93. const L_Text_Error_General02_Text  = "Unable to parse command line." 
  94. const L_Text_Error_General03_Text  = "Unable to get printer instance."
  95. const L_Text_Error_General04_Text  = "Win32 error code"
  96. const L_Text_Error_General05_Text  = "Unable to get SWbemLocator object"
  97. const L_Text_Error_General06_Text  = "Unable to connect to WMI service"
  98.  
  99.  
  100. '
  101. ' Action strings
  102. '
  103. const L_Text_Action_General01_Text = "Pause"
  104. const L_Text_Action_General02_Text = "Resume"
  105. const L_Text_Action_General03_Text = "Purge"
  106. const L_Text_Action_General04_Text = "Print Test Page"
  107.  
  108. '
  109. ' Debug messages
  110. '
  111. const L_Text_Dbg_Msg01_Text        = "In function ExecPrinter"
  112. const L_Text_Dbg_Msg02_Text        = "Server name"
  113. const L_Text_Dbg_Msg03_Text        = "Printer name"
  114. const L_Text_Dbg_Msg04_Text        = "In function ParseCommandLine"
  115.                                
  116. main
  117.  
  118. '
  119. ' Main execution starts here
  120. '
  121. sub main
  122.  
  123.     dim iAction
  124.     dim iRetval
  125.     dim strServer
  126.     dim strPrinter
  127.     dim strUser
  128.     dim strPassword
  129.     
  130.     '
  131.     ' Abort if the host is not cscript
  132.     '
  133.     if not IsHostCscript() then
  134.    
  135.         call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _
  136.                           L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _
  137.                           L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)
  138.         
  139.         wscript.quit
  140.    
  141.     end if
  142.  
  143.     '
  144.     ' Get command line parameters
  145.     '
  146.     iRetval = ParseCommandLine(iAction, strServer, strPrinter, strUser, strPassword)
  147.  
  148.     if iRetval = kErrorSuccess then
  149.  
  150.         select case iAction
  151.  
  152.             case kActionPause
  153.                  iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General01_Text)
  154.  
  155.             case kActionResume
  156.                  iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General02_Text)
  157.  
  158.             case kActionPurge
  159.                  iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General03_Text)
  160.  
  161.             case kActionTestPage
  162.                  iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General04_Text)
  163.  
  164.             case kActionUnknown
  165.                  Usage(true)
  166.                  exit sub
  167.  
  168.             case else
  169.                  Usage(true)
  170.                  exit sub
  171.  
  172.         end select
  173.  
  174.     end if
  175.  
  176. end sub
  177.  
  178. '
  179. ' Pause/Resume/Purge printer and print test page
  180. '
  181. function ExecPrinter(strServer, strPrinter, strUser, strPassword, strCommand)
  182.  
  183.     on error resume next
  184.  
  185.     DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text
  186.     DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text & L_Space_Text & strServer
  187.     DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text & L_Space_Text & strPrinter
  188.     
  189.     dim oPrinter
  190.     dim oService
  191.     dim iRetval
  192.     dim uResult
  193.     
  194.     iRetval = kErrorFailure
  195.     
  196.     if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
  197.                
  198.         set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'")
  199.     
  200.     else
  201.     
  202.         ExecPrinter = kErrorFailure
  203.         
  204.         exit function        
  205.     
  206.     end if
  207.     
  208.     '
  209.     ' Check if getting a printer instance succeeded
  210.     '
  211.     if Err.Number = kErrorSuccess then
  212.     
  213.         select case strCommand
  214.         
  215.             case L_Text_Action_General01_Text
  216.                  uResult = oPrinter.Pause()
  217.                  
  218.             case L_Text_Action_General02_Text
  219.                  uResult = oPrinter.Resume()
  220.                  
  221.             case L_Text_Action_General03_Text
  222.                  uResult = oPrinter.CancelAllJobs()          
  223.                  
  224.             case L_Text_Action_General04_Text
  225.                  uResult = oPrinter.PrintTestPage()  
  226.             
  227.             case else
  228.                  Usage(true)
  229.                  
  230.         end select
  231.  
  232.         '
  233.         ' Err set by WMI 
  234.         ' 
  235.         if Err.Number = kErrorSuccess then
  236.  
  237.             '
  238.             ' uResult set by printer methods
  239.             '             
  240.             if uResult = kErrorSuccess then                     
  241.             
  242.                 wscript.echo L_Success_Text & L_Space_Text & strCommand & L_Space_Text _
  243.                              & L_Printer_Text & L_Space_Text & strPrinter
  244.         
  245.                 iRetval = kErrorSuccess
  246.                 
  247.             else
  248.             
  249.                 wscript.echo L_Failed_Text & L_Space_Text & strCommand & L_Space_Text _
  250.                              & L_Text_Error_General04_Text & L_Space_Text & uResult 
  251.             
  252.             end if    
  253.  
  254.         else
  255.  
  256.             wscript.echo L_Failed_Text & L_Space_Text & strCommand & L_Space_Text & L_Error_Text _
  257.                          & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
  258.             
  259.         end if
  260.          
  261.     else      
  262.         
  263.         wscript.echo L_Text_Error_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _
  264.                      & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
  265.         
  266.         '
  267.         ' Try getting extended error information
  268.         '            
  269.         call LastError()
  270.         
  271.     end if
  272.     
  273.     ExecPrinter = iRetval
  274.     
  275. end function
  276.  
  277. '
  278. ' Debug display helper function
  279. '
  280. sub DebugPrint(uFlags, strString)
  281.  
  282.     if gDebugFlag = true then
  283.  
  284.         if uFlags = kDebugTrace then
  285.  
  286.             wscript.echo L_Debug_Text & L_Space_Text & strString
  287.  
  288.         end if
  289.  
  290.         if uFlags = kDebugError then
  291.  
  292.             if Err <> 0 then
  293.  
  294.                 wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _
  295.                              & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _
  296.                              & L_Space_Text & Err.Description
  297.  
  298.             end if
  299.  
  300.         end if
  301.  
  302.     end if
  303.  
  304. end sub
  305.  
  306. '
  307. ' Parse the command line into its components
  308. '
  309. function ParseCommandLine(iAction, strServer, strPrinter, strUser, strPassword)
  310.  
  311.     on error resume next
  312.  
  313.     DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text
  314.  
  315.     dim oArgs
  316.     dim iIndex
  317.  
  318.     iAction = kActionUnknown
  319.     iIndex = 0
  320.  
  321.     set oArgs = wscript.Arguments
  322.  
  323.     while iIndex < oArgs.Count
  324.  
  325.         select case oArgs(iIndex)
  326.  
  327.             case "-z"
  328.                 iAction = kActionPause
  329.  
  330.             case "-m"
  331.                 iAction = kActionResume
  332.  
  333.             case "-x"
  334.                 iAction = kActionPurge
  335.  
  336.             case "-e"
  337.                 iAction = kActionTestPage
  338.  
  339.             case "-p"
  340.                 iIndex = iIndex + 1
  341.                 strPrinter = oArgs(iIndex)
  342.                 
  343.             case "-s"
  344.                 iIndex = iIndex + 1
  345.                 strServer = RemoveBackslashes(oArgs(iIndex)) 
  346.                   
  347.             case "-u"
  348.                 iIndex = iIndex + 1
  349.                 strUser = oArgs(iIndex)
  350.                 
  351.             case "-w"
  352.                 iIndex = iIndex + 1
  353.                 strPassword = oArgs(iIndex)           
  354.  
  355.             case "-?"
  356.                 Usage(true)
  357.                 exit function
  358.  
  359.             case else
  360.                 Usage(true)
  361.                 exit function
  362.  
  363.         end select
  364.  
  365.         iIndex = iIndex + 1
  366.  
  367.     wend
  368.  
  369.     if Err.Number = kErrorSuccess then
  370.  
  371.         ParseCommandLine = kErrorSuccess
  372.  
  373.     else
  374.     
  375.         wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _
  376.                      & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description
  377.         
  378.         ParseCommandLine = kErrorFailure
  379.     
  380.     end if
  381.     
  382. end function
  383.  
  384. '
  385. ' Display command usage.
  386. '
  387. sub Usage(bExit)
  388.  
  389.     wscript.echo L_Help_Help_General01_Text
  390.     wscript.echo L_Empty_Text
  391.     wscript.echo L_Help_Help_General02_Text
  392.     wscript.echo L_Help_Help_General03_Text
  393.     wscript.echo L_Help_Help_General04_Text
  394.     wscript.echo L_Help_Help_General05_Text
  395.     wscript.echo L_Help_Help_General06_Text
  396.     wscript.echo L_Help_Help_General07_Text
  397.     wscript.echo L_Help_Help_General08_Text
  398.     wscript.echo L_Help_Help_General09_Text
  399.     wscript.echo L_Help_Help_General10_Text
  400.     wscript.echo L_Help_Help_General11_Text
  401.     wscript.echo L_Empty_Text
  402.     wscript.echo L_Help_Help_General12_Text
  403.     wscript.echo L_Help_Help_General13_Text
  404.     wscript.echo L_Help_Help_General14_Text
  405.     wscript.echo L_Help_Help_General15_Text
  406.  
  407.     if bExit then
  408.  
  409.         wscript.quit(1)
  410.  
  411.     end if
  412.  
  413. end sub
  414.  
  415. '
  416. ' Determines which program is being used to run this script. 
  417. ' Returns true if the script host is cscript.exe
  418. '
  419. function IsHostCscript()
  420.  
  421.     on error resume next
  422.     
  423.     dim strFullName 
  424.     dim strCommand 
  425.     dim i, j 
  426.     dim bReturn
  427.     
  428.     bReturn = false
  429.     
  430.     strFullName = WScript.FullName
  431.     
  432.     i = InStr(1, strFullName, ".exe", 1)
  433.     
  434.     if i <> 0 then
  435.         
  436.         j = InStrRev(strFullName, "\", i, 1)
  437.         
  438.         if j <> 0 then
  439.             
  440.             strCommand = Mid(strFullName, j+1, i-j-1)
  441.             
  442.             if LCase(strCommand) = "cscript" then
  443.             
  444.                 bReturn = true  
  445.             
  446.             end if    
  447.                 
  448.         end if
  449.         
  450.     end if
  451.     
  452.     if Err <> 0 then
  453.     
  454.         wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _
  455.                      & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description 
  456.         
  457.     end if
  458.     
  459.     IsHostCscript = bReturn
  460.  
  461. end function
  462.  
  463. '
  464. ' Retrieves extended information about the last error that occurred 
  465. ' during a WBEM operation. The methods that set an SWbemLastError
  466. ' object are GetObject, PutInstance, DeleteInstance
  467. '
  468. sub LastError()
  469.  
  470.     on error resume next
  471.  
  472.     dim oError
  473.  
  474.     set oError = CreateObject("WbemScripting.SWbemLastError")
  475.    
  476.     if Err = kErrorSuccess then
  477.    
  478.         wscript.echo L_Operation_Text            & L_Space_Text & oError.Operation
  479.         wscript.echo L_Provider_Text             & L_Space_Text & oError.ProviderName
  480.         wscript.echo L_Description_Text          & L_Space_Text & oError.Description
  481.         wscript.echo L_Text_Error_General04_Text & L_Space_Text & oError.StatusCode
  482.                 
  483.     end if                                                             
  484.                                                              
  485. end sub
  486.  
  487. '
  488. ' Connects to the WMI service on a server. oService is returned as a service
  489. ' object (SWbemServices)
  490. '
  491. function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)
  492.  
  493.    on error resume next
  494.  
  495.    dim oLocator
  496.    dim bResult
  497.    
  498.    oService = null
  499.    
  500.    bResult  = false
  501.    
  502.    set oLocator = CreateObject("WbemScripting.SWbemLocator")
  503.  
  504.    if Err = kErrorSuccess then
  505.  
  506.       set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)
  507.  
  508.       if Err = kErrorSuccess then
  509.       
  510.           bResult = true
  511.       
  512.           oService.Security_.impersonationlevel = 3
  513.           
  514.           Err.Clear
  515.       
  516.       else
  517.  
  518.           wscript.echo L_Text_Error_General06_Text & L_Space_Text & L_Error_Text _
  519.                        & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
  520.                        & Err.Description
  521.             
  522.       end if
  523.    
  524.    else
  525.    
  526.        wscript.echo L_Text_Error_General05_Text & L_Space_Text & L_Error_Text _
  527.                     & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
  528.                     & Err.Description
  529.          
  530.    end if                                                         
  531.             
  532.    WmiConnect = bResult
  533.             
  534. end function
  535.  
  536. '
  537. ' Remove leading "\\" from server name
  538. '
  539. function RemoveBackslashes(strServer)
  540.  
  541.     dim strRet
  542.     
  543.     strRet = strServer
  544.     
  545.     if Left(strServer, 2) = "\\" and Len(strServer) > 2 then 
  546.    
  547.         strRet = Mid(strServer, 3) 
  548.         
  549.     end if   
  550.  
  551.     RemoveBackslashes = strRet
  552.  
  553. end function 
  554.  
  555. '' SIG '' Begin signature block
  556. '' SIG '' MIIZMAYJKoZIhvcNAQcCoIIZITCCGR0CAQExDjAMBggq
  557. '' SIG '' hkiG9w0CBQUAMGYGCisGAQQBgjcCAQSgWDBWMDIGCisG
  558. '' SIG '' AQQBgjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIB
  559. '' SIG '' AAIBAAIBAAIBAAIBADAgMAwGCCqGSIb3DQIFBQAEEAVK
  560. '' SIG '' mi1f5zhhbqCkKkeOxxOgghQ4MIICvDCCAiUCEEoZ0jiM
  561. '' SIG '' glkcpV1zXxVd3KMwDQYJKoZIhvcNAQEEBQAwgZ4xHzAd
  562. '' SIG '' BgNVBAoTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxFzAV
  563. '' SIG '' BgNVBAsTDlZlcmlTaWduLCBJbmMuMSwwKgYDVQQLEyNW
  564. '' SIG '' ZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2UgUm9v
  565. '' SIG '' dDE0MDIGA1UECxMrTk8gTElBQklMSVRZIEFDQ0VQVEVE
  566. '' SIG '' LCAoYyk5NyBWZXJpU2lnbiwgSW5jLjAeFw05NzA1MTIw
  567. '' SIG '' MDAwMDBaFw0wNDAxMDcyMzU5NTlaMIGeMR8wHQYDVQQK
  568. '' SIG '' ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMRcwFQYDVQQL
  569. '' SIG '' Ew5WZXJpU2lnbiwgSW5jLjEsMCoGA1UECxMjVmVyaVNp
  570. '' SIG '' Z24gVGltZSBTdGFtcGluZyBTZXJ2aWNlIFJvb3QxNDAy
  571. '' SIG '' BgNVBAsTK05PIExJQUJJTElUWSBBQ0NFUFRFRCwgKGMp
  572. '' SIG '' OTcgVmVyaVNpZ24sIEluYy4wgZ8wDQYJKoZIhvcNAQEB
  573. '' SIG '' BQADgY0AMIGJAoGBANMuIPBofCwtLoEcsQaypwu3EQ1X
  574. '' SIG '' 2lPYdePJMyqy1PYJWzTz6ZD+CQzQ2xtauc3n9oixncCH
  575. '' SIG '' Jet9WBBzanjLcRX9xlj2KatYXpYE/S1iEViBHMpxlNUi
  576. '' SIG '' WC/VzBQFhDa6lKq0TUrp7jsirVaZfiGcbIbASkeXarSm
  577. '' SIG '' NtX8CS3TtDmbAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEA
  578. '' SIG '' YVUOPnvHkhJ+ERCOIszUsxMrW+hE5At4nqR+86cHch7i
  579. '' SIG '' We/MhOOJlEzbTmHvs6T7Rj1QNAufcFb2jip/F87lY795
  580. '' SIG '' aQdzLrCVKIr17aqp0l3NCsoQCY/Os68olsR5KYSS3P+6
  581. '' SIG '' Z0JIppAQ5L9h+JxT5ZPRcz/4/Z1PhKxV0f0RY2MwggQC
  582. '' SIG '' MIIDa6ADAgECAhAIem1cb2KTT7rE/UPhFBidMA0GCSqG
  583. '' SIG '' SIb3DQEBBAUAMIGeMR8wHQYDVQQKExZWZXJpU2lnbiBU
  584. '' SIG '' cnVzdCBOZXR3b3JrMRcwFQYDVQQLEw5WZXJpU2lnbiwg
  585. '' SIG '' SW5jLjEsMCoGA1UECxMjVmVyaVNpZ24gVGltZSBTdGFt
  586. '' SIG '' cGluZyBTZXJ2aWNlIFJvb3QxNDAyBgNVBAsTK05PIExJ
  587. '' SIG '' QUJJTElUWSBBQ0NFUFRFRCwgKGMpOTcgVmVyaVNpZ24s
  588. '' SIG '' IEluYy4wHhcNMDEwMjI4MDAwMDAwWhcNMDQwMTA2MjM1
  589. '' SIG '' OTU5WjCBoDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4x
  590. '' SIG '' HzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx
  591. '' SIG '' OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov
  592. '' SIG '' L3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAxMScwJQYD
  593. '' SIG '' VQQDEx5WZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZp
  594. '' SIG '' Y2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
  595. '' SIG '' AQDAemGH67KnA2MbKxph3oC3FR2gi5A9uyeShBQ564XO
  596. '' SIG '' KZIGZkikA0+N6E+n8K9e0S8Zx5HxtZ57kSHO6f/jTvD8
  597. '' SIG '' r5VYuGMt5o72KRjNcI5Qw+2Wu0DbviXoQlXW9oXyBueL
  598. '' SIG '' mRwx8wMP1EycJCrcGxuPgvOw76dN4xSn4I/Wx2jCYVip
  599. '' SIG '' ctT4MEhP2S9vYyDZicqCe8JLvCjFgWjn5oJArEY6oPk/
  600. '' SIG '' Ns1Mu1RCWnple/6E5MdHVKy5PeyAxxr3xDOBgckqlft/
  601. '' SIG '' XjqHkBTbzC518u9r5j2pYL5CAapPqluoPyIxnxIV+XOh
  602. '' SIG '' HoKLBCvqRgJMbY8fUC6VSyp4BoR0PZGPLEcxAgMBAAGj
  603. '' SIG '' gbgwgbUwQAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAB
  604. '' SIG '' hiRodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20vb2NzcC9z
  605. '' SIG '' dGF0dXMwCQYDVR0TBAIwADBEBgNVHSAEPTA7MDkGC2CG
  606. '' SIG '' SAGG+EUBBwEBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
  607. '' SIG '' d3d3LnZlcmlzaWduLmNvbS9ycGEwEwYDVR0lBAwwCgYI
  608. '' SIG '' KwYBBQUHAwgwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEB
  609. '' SIG '' BAUAA4GBAC3zT2NgLBja9SQPUrMM67O8Z4XCI+2PRg3P
  610. '' SIG '' Gk2+83x6IDAyGGiLkrsymfCTuDsVBid7PgIGAKQhkoQT
  611. '' SIG '' CsWY5UBXxQUl6K+vEWqp5TvL6SP2lCldQFXzpVOdyDY6
  612. '' SIG '' OWUIc3OkMtKvrL/HBTz/RezD6Nok0c5jrgmn++Ib4/1B
  613. '' SIG '' CmqWMIIEEjCCAvqgAwIBAgIPAMEAizw8iBHRPvZj7N9A
  614. '' SIG '' MA0GCSqGSIb3DQEBBAUAMHAxKzApBgNVBAsTIkNvcHly
  615. '' SIG '' aWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAc
  616. '' SIG '' BgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8G
  617. '' SIG '' A1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5MB4X
  618. '' SIG '' DTk3MDExMDA3MDAwMFoXDTIwMTIzMTA3MDAwMFowcDEr
  619. '' SIG '' MCkGA1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jv
  620. '' SIG '' c29mdCBDb3JwLjEeMBwGA1UECxMVTWljcm9zb2Z0IENv
  621. '' SIG '' cnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgUm9v
  622. '' SIG '' dCBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IB
  623. '' SIG '' DwAwggEKAoIBAQCpAr3BcOY78k4bKJ+XeF4w6qKpjSVf
  624. '' SIG '' +P6VTKO3/p2iID58UaKboo9gMmvRQmR57qx2yVTa8uuc
  625. '' SIG '' hhyPn4Rms8VremIj1h083g8BkuiWxL8tZpqaaCaZ0Dos
  626. '' SIG '' vwy1WCbBRucKPjiWLKkoOajsSYNC44QPu5psVWGsgnyh
  627. '' SIG '' YC13TOmZtGQ7mlAcMQgkFJ+p55ErGOY9mGMUYFgFZZ8d
  628. '' SIG '' N1KH96fvlALGG9O/VUWziYC/OuxUlE6u/ad6bXROrxjM
  629. '' SIG '' lgkoIQBXkGBpN7tLEgc8Vv9b+6RmCgim0oFWV++2O14W
  630. '' SIG '' gXcE2va+roCV/rDNf9anGnJcPMq88AijIjCzBoXJsyB3
  631. '' SIG '' E4XfAgMBAAGjgagwgaUwgaIGA1UdAQSBmjCBl4AQW9Bw
  632. '' SIG '' 72lyniNRfhSyTY7/y6FyMHAxKzApBgNVBAsTIkNvcHly
  633. '' SIG '' aWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAc
  634. '' SIG '' BgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8G
  635. '' SIG '' A1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5gg8A
  636. '' SIG '' wQCLPDyIEdE+9mPs30AwDQYJKoZIhvcNAQEEBQADggEB
  637. '' SIG '' AJXoC8CN85cYNe24ASTYdxHzXGAyn54Lyz4FkYiPyTrm
  638. '' SIG '' IfLwV5MstaBHyGLv/NfMOztaqTZUaf4kbT/JzKreBXzd
  639. '' SIG '' MY09nxBwarv+Ek8YacD80EPjEVogT+pie6+qGcgrNyUt
  640. '' SIG '' vmWhEoolD2Oj91Qc+SHJ1hXzUqxuQzIH/YIX+OVnbA1R
  641. '' SIG '' 9r3xUse958Qw/CAxCYgdlSkaTdUdAqXxgOADtFv0sd3I
  642. '' SIG '' V+5lScdSVLa0AygS/5DW8AiPfriXxas3LOR65Kh343ag
  643. '' SIG '' ANBqP8HSNorgQRKoNWobats14dQcBOSoRQTIWjM4bk0c
  644. '' SIG '' DWK3CqKM09VUP0bNHFWmcNsSOoeTdZ+n0qAwggSLMIID
  645. '' SIG '' c6ADAgECAgphBiqNAAAAAAALMA0GCSqGSIb3DQEBBQUA
  646. '' SIG '' MIGmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
  647. '' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
  648. '' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJD
  649. '' SIG '' b3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAu
  650. '' SIG '' MSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5n
  651. '' SIG '' IFBDQTAeFw0wMTAzMjkyMTI3MjZaFw0wMjA1MjkyMTM3
  652. '' SIG '' MjZaMIGhMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
  653. '' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
  654. '' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQL
  655. '' SIG '' EyJDb3B5cmlnaHQgKGMpIDIwMDEgTWljcm9zb2Z0IENv
  656. '' SIG '' cnAuMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRp
  657. '' SIG '' b24wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAI4W
  658. '' SIG '' b9oX0+NFlbKs0+XPMT0dxIe7TkgF+YtWqSuHY8hE2jDJ
  659. '' SIG '' FLzreBq6xOricgBMRmab3mJGbp73RLrous/C1fU7lke4
  660. '' SIG '' UV7Rd2cie1MqLeoij3xO/wK1GzOg6pXrGLp2+WHSAAuU
  661. '' SIG '' YDQ7SYYss9mOky4ta/3jVaq4qm7gcPSiYAYvAgMBAAGj
  662. '' SIG '' ggFAMIIBPDAOBgNVHQ8BAf8EBAMCBsAwEwYDVR0lBAww
  663. '' SIG '' CgYIKwYBBQUHAwMwHQYDVR0OBBYEFO+QQN5P4BuzRdgH
  664. '' SIG '' A3uZ+XUZZjUaMIGpBgNVHSMEgaEwgZ6AFClcuRu2zTPu
  665. '' SIG '' u55Zffflyi7EDTQooXSkcjBwMSswKQYDVQQLEyJDb3B5
  666. '' SIG '' cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4w
  667. '' SIG '' HAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
  668. '' SIG '' BgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIQ
  669. '' SIG '' aguZT8AA3qoR1NhAmqi+5jBKBgNVHR8EQzBBMD+gPaA7
  670. '' SIG '' hjlodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
  671. '' SIG '' bC9wcm9kdWN0cy9Db2RlU2lnblBDQS5jcmwwDQYJKoZI
  672. '' SIG '' hvcNAQEFBQADggEBAARnzM/dcU1Hwo6DaRJrol+WJgfo
  673. '' SIG '' j9jTnlrbJ2kdHfQ8VShT3REkJ5KuWVZA6cRNnezbq36U
  674. '' SIG '' mz0gLDXyJ07AyDm3ZWPRNWbaU71BfllKpFK39f3IvaF7
  675. '' SIG '' BriY2Jju0Qs0dWYN3EGPw7CShFfBQnqFxpET21St3n5B
  676. '' SIG '' 3CCv6RvJwjIxxY3py/qDS8FYkzLE1+PNeqvffQicxoU7
  677. '' SIG '' 6EGBOLF4Gbw4981rws6qTJAdg8bmAYloqueP6AdQKjLd
  678. '' SIG '' 18+9zHrZOg//skSKV8gaN2QHF317cktGBqEoWyNXHmr9
  679. '' SIG '' kSIzQNF1SxIBbgYhhDZvqCoMfz6uNSv2t30LCBPlV/NL
  680. '' SIG '' rY8gv7gwggTJMIIDsaADAgECAhBqC5lPwADeqhHU2ECa
  681. '' SIG '' qL7mMA0GCSqGSIb3DQEBBAUAMHAxKzApBgNVBAsTIkNv
  682. '' SIG '' cHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4x
  683. '' SIG '' HjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEh
  684. '' SIG '' MB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5
  685. '' SIG '' MB4XDTAwMTIxMDA4MDAwMFoXDTA1MTExMjA4MDAwMFow
  686. '' SIG '' gaYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
  687. '' SIG '' dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
  688. '' SIG '' aWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAsTIkNv
  689. '' SIG '' cHlyaWdodCAoYykgMjAwMCBNaWNyb3NvZnQgQ29ycC4x
  690. '' SIG '' IzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcg
  691. '' SIG '' UENBMIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKC
  692. '' SIG '' AQEAooQVU9gLMA40lf86G8LzL3ttNyNN89KM5f2v/cUC
  693. '' SIG '' NB8kx+Wh3FTsfgJ0R6vbMlgWFFEpOPF+srSMOke1OU5u
  694. '' SIG '' VMIxDDpt+83Ny1CcG66n2NlKJj+1xcuPluJJ8m3Y6ZY+
  695. '' SIG '' 3gXP8KZVN60vYM2AYUKhSVRKDxi3S9mTmTBaR3VktNO7
  696. '' SIG '' 3barDJ1PuHM7GDqqtIeMsIiwTU8fThG1M4DfDTpkb0TH
  697. '' SIG '' NL1Kk5u8ph35BSNOYCmPzCryhJqZrajbCnB71jRBkKW3
  698. '' SIG '' ZsdcGx2jMw6bVAMaP5iQuMznPQR0QxyP9znms6xIemsq
  699. '' SIG '' DmIBYTl2bv0+mAdLFPEBRv0VAOBH2k/kBeSAJQIBA6OC
  700. '' SIG '' ASgwggEkMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIGiBgNV
  701. '' SIG '' HQEEgZowgZeAEFvQcO9pcp4jUX4Usk2O/8uhcjBwMSsw
  702. '' SIG '' KQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9z
  703. '' SIG '' b2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29y
  704. '' SIG '' cG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290
  705. '' SIG '' IEF1dGhvcml0eYIPAMEAizw8iBHRPvZj7N9AMBAGCSsG
  706. '' SIG '' AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQpXLkbts0z7rue
  707. '' SIG '' WX335couxA00KDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi
  708. '' SIG '' AEMAQTALBgNVHQ8EBAMCAUYwDwYDVR0TAQH/BAUwAwEB
  709. '' SIG '' /zANBgkqhkiG9w0BAQQFAAOCAQEARVjimkF//J2/SHd3
  710. '' SIG '' rozZ5hnFV7QavbS5XwKhRWo5Wfm5J5wtTZ78ouQ4ijhk
  711. '' SIG '' IkLfuS8qz7fWBsrrKr/gGoV821EIPfQi09TAbYiBFURf
  712. '' SIG '' ZINkxKmULIrbkDdKD7fo1GGPdnbh2SX/JISVjQRWVJSh
  713. '' SIG '' HDo+grzupYeMHIxLeV+1SfpeMmk6H1StdU3fZOcwPNtk
  714. '' SIG '' SUT7+8QcQnHmoD1F7msAn6xCvboRs1bk+9WiKoHYH06i
  715. '' SIG '' Vb4nj3Cmomwb/1SKgryBS6ahsWZ6qRenywbAR+ums+kx
  716. '' SIG '' FVM9KgS//3NI3IsnQ/xj6O4kh1u+NtHoMfUy2V7feXq6
  717. '' SIG '' MKxphkr7jBG/G41UWTGCBGIwggReAgEBMIG1MIGmMQsw
  718. '' SIG '' CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
  719. '' SIG '' MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
  720. '' SIG '' b2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJDb3B5cmln
  721. '' SIG '' aHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAuMSMwIQYD
  722. '' SIG '' VQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQIK
  723. '' SIG '' YQYqjQAAAAAACzAMBggqhkiG9w0CBQUAoIGwMBkGCSqG
  724. '' SIG '' SIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC
  725. '' SIG '' AQsxDjAMBgorBgEEAYI3AgEVMB8GCSqGSIb3DQEJBDES
  726. '' SIG '' BBDk+J9KG9mtR7f3zrlDrtUOMFQGCisGAQQBgjcCAQwx
  727. '' SIG '' RjBEoCaAJABXAE0ASQAgAHAAcgBpAG4AdABlAHIAIABz
  728. '' SIG '' AGMAcgBpAHAAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29m
  729. '' SIG '' dC5jb20wDQYJKoZIhvcNAQEBBQAEgYAIdNx52NyTWjs4
  730. '' SIG '' VMIz8fBO2GnhNXv+MNVhBEC+sRiP8us2lJFOBpqD+G//
  731. '' SIG '' 8gx/UI8XgraZeaCaJvWJ6yQ6axCZrO3b5hDDnd0XyJb8
  732. '' SIG '' rZOHFXOXgGzaO202pATVN55kIJShqMCaNArf1MZ6vZie
  733. '' SIG '' vua3tzZzMCX4NutZcYwsxixQPaGCAkwwggJIBgkqhkiG
  734. '' SIG '' 9w0BCQYxggI5MIICNQIBATCBszCBnjEfMB0GA1UEChMW
  735. '' SIG '' VmVyaVNpZ24gVHJ1c3QgTmV0d29yazEXMBUGA1UECxMO
  736. '' SIG '' VmVyaVNpZ24sIEluYy4xLDAqBgNVBAsTI1ZlcmlTaWdu
  737. '' SIG '' IFRpbWUgU3RhbXBpbmcgU2VydmljZSBSb290MTQwMgYD
  738. '' SIG '' VQQLEytOTyBMSUFCSUxJVFkgQUNDRVBURUQsIChjKTk3
  739. '' SIG '' IFZlcmlTaWduLCBJbmMuAhAIem1cb2KTT7rE/UPhFBid
  740. '' SIG '' MAwGCCqGSIb3DQIFBQCgWTAYBgkqhkiG9w0BCQMxCwYJ
  741. '' SIG '' KoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wMTEyMDcy
  742. '' SIG '' MDIzMTdaMB8GCSqGSIb3DQEJBDESBBDkDoOezCP9AjDb
  743. '' SIG '' z0ZhqiRWMA0GCSqGSIb3DQEBAQUABIIBAGpvhYduh6HS
  744. '' SIG '' 14fEvXKjj3ObmF7H84ElZfG1guqaH5yzQasIrtQcj7sH
  745. '' SIG '' hBYGb/L7jsaVD/NKgH/ZkW0sUdbyIkv6vkOLnsKBs8cq
  746. '' SIG '' 2GGQvFV8jYdXJUEqo+XD/2ehC1Wj+b6+YQxyMCITN42F
  747. '' SIG '' +YfRBATzgfTwwDmmJ/KFQgDA3ZfMl38didaABKr7zhEo
  748. '' SIG '' pA37ZJzI7q85n0AtUlULBBlAxmDasfxhAO4or3vHETZ/
  749. '' SIG '' dHk9q3VH8q+CWiH55QMXKnJ1SrlEIUooLRcKWsw42IEj
  750. '' SIG '' d2Ean54V5izi/1NTVTUmFj5n74Q1kHJ7I6d7lek6+Bpu
  751. '' SIG '' gTtFXkMh6KswounLzxH2x3M=
  752. '' SIG '' End signature block
  753.